package org.example.demo3.demos.web.utils;


import cn.hutool.core.util.StrUtil;
import org.example.demo3.demos.web.constants.CommonConstants;

import java.io.UnsupportedEncodingException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 字符串工具类
 *
 * @author cdl
 * @date 2023/11/01
 */
public class StringUtil extends StrUtil {

    private static final Pattern CHAR_PATTERN = Pattern.compile("[\u4e00-\u9fa5]");

    public static final String EMPTY = "";

    public static String toString(Object obj) {
        return obj != null ? obj.toString() : "";
    }

    public static String toString(Object obj, String str) {
        return obj != null ? obj.toString() : str;
    }

    /**
     * * 判断一个字符串是否为空串
     *
     * @param str Object
     * @return true：为空 false：非空
     */
    public static boolean isEmpty(Object str)
    {
        return isNull(str) || EMPTY.equals(str);
    }

    /**
     * * 判断一个对象是否为空
     *
     * @param object Object
     * @return true：为空 false：非空
     */
    public static boolean isNull(Object object)
    {
        return object == null;
    }

    /***
     * 判断是否需要补全商品简码
     * ture为需要补全
     * false为不需要补全
     */
    public static boolean checkXmmc(String spmc, String sphfwfljc) {
        /**
         * 1.判断商品是否以星号开头
         * 2.判断商品名称中是否包含2个以上星号
         * 3.截取前两个星号中间的简称
         * 4.判断简称为汉字
         * 5.判断简称超过4个字节.简称最小为2个汉字
         * 6.都符合条件返回为false,已经包含商品简称,不需要补全
         */
        // 默认需要补全
        boolean flag = true;
        if (spmc.indexOf(CommonConstants.STRING_STAR) == 0) {
            String[] split = spmc.split("\\*");
            if (split.length > 2) {
                String jm = split[1];
                // 判断简码是否为汉字
                if (checkName(jm)) {
                    try {
                        if (jm.getBytes(CommonConstants.STRING_CHARSET_GBK).length >= 2) {
                            // 判断简码和商品简称是否一致,如果一致不需要补全简称,如果不一致需要补全简称
                            flag = StrUtil.isNotBlank(sphfwfljc) && !jm.equals(sphfwfljc);
                        }
                    } catch (UnsupportedEncodingException ignored) {

                    }
                }
            }
        }
        return flag;
    }

    /**
     * 校验是否为汉字
     * true为汉字
     * false为非汉字
     */
    public static boolean checkName(String name) {
        Matcher m = CHAR_PATTERN.matcher(name);
        return m.find();
    }

    /**
     * 校验字符串长度是否合法
     */
    public static boolean checkStrLength(String param, int minLength, int maxLength) {
        return getStrLength(param) >= minLength && getStrLength(param) <= maxLength;
    }

    /**
     * 获取字符串长度
     */
    private static int getStrLength(String param) {
        return param == null ? 0 : param.length();
    }
}
